<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hooks (ตะขอ) - ขยายระบบหลัก : คู่มือการใช้งาน CodeIgniter</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker_th.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>คู่มือการใช้งาน CodeIgniter เวอร์ชั่น 1.7.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">หน้าตารางเนื้อหา</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.in.th/">CodeIgniter.in.th</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">หน้าหลักคู่มือการใช้งาน</a> &nbsp;&#8250;&nbsp;
Hooks (ตะขอ) - ขยายระบบหลัก</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.in.th/user_guide/" />ค้นหาคู่มือการใช้งาน&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="ค้นหา" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">

<h1>Hooks (ตะขอ) - ขยายระบบหลัก</h1>

<p>คุณสมบัติตะขอที่ CodeIgniter มีไว้ให้หมายถึงการได้ประโยชน์และการเปลี่ยนแปลงการทำงานภายในของเฟรมเวิร์คโดยไม่ยุ่งเกี่ยวกับไฟล์ระบบหลัก.
เมื่อ CodeIgniter รันมันจะทำตามการทำงานตามที่กำหนด ตามแผนภาพที่อยู่ในหน้า <a href="../overview/appflow.html">ขั้นตอนการทำงานของแอพพลิเคชั่น</a>
 อย่างไรก็ตามคุณสามารถกำหนดให้มันทำหรือเปลี่ยนแปลงในเวลาที่กำลังดำเนินการการได้
ยกตัวอย่างเช่น  คุณต้องการรันสคริปก่อนที่ตัวควบคุมจะถูกโหลดขึ้นหรือหลังโหลด หรือคุณอาจจะต้องการให้สคริปคุณถูกกระตุ้นในตำแหน่งอื่นๆ</p>

<h2>เปิดคุณสมบัติตะขอ</h2>

<p>คุณสมบัติตะขอสามารถถูกเปิด/ปิดทั้งระบบได้โดยการตั้งค่าในไฟล์ <kbd>application/config/config.php</kbd> :</p>

<code>$config['enable_hooks'] = TRUE;</code>


<h2>กำหนดตะขอ</h2>

<p>ตะขอสามารถถูกกำหนดได้ในไฟล์ <dfn>application/config/hooks.php</dfn> แต่ละตะขอมีการกำหนดเป็นอาเรย์ด้วยต้นแบบนี้</p>

<code>
$hook['pre_controller'] = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'class'&nbsp;&nbsp;&nbsp;&nbsp;=> 'MyClass',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'function' => 'Myfunction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filename' => 'Myclass.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filepath' => 'hooks',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'params'&nbsp;&nbsp;&nbsp;=> array('beer', 'wine', 'snacks')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</code>

<p><strong>สังเกตุ:</strong><br />
  ตัวชี้อาเรย์ (index) มีความสัมพันธ์ร่วมกับชื่อของปลายตะขอที่คุณเลือกใช้  ในตัวอย่างด้านบนปลายตะขอก็คือ <kbd>pre_controller</kbd>. โดยชื่อของปลายตะขอจะอยู่ด้านล่าง
โดยมีของดังต่อไปนี้ที่ต้องกำหนดในอาเรย์ตะขอ:</p>

<ul>
<li><strong>class</strong>&nbsp; ชื่อคลาสที่คุณต้องการเรียก ถ้าคุณต้องการเรียกเพียงฟังก์ชั่นที่ไม่มีคลาสก็ปล่อยอันนี้ให้ว่างไว้</li>
<li><strong>function</strong>&nbsp; ชื่อฟังก์ชั่นที่คุณต้องการเรียก</li>
<li><strong>filename</strong>&nbsp; ชื่อไฟล์ที่มีคลาสหรือฟังก์ชั่นของคุณอยู่</li>
<li><strong>filepath</strong>&nbsp; ชื่อไดเรคทอรี่ที่มีสคริปของคุณอยู่  หมายเหตุสคริปของคุณจะต้องอยู่ภายในไดเรคทอรี่ภายใต้โฟลเดอร์  <kbd>application</kbd> เท่านั้น, โดย filepath ก็คือชื่อโฟลเดอร์นั้น ตัวอย่างเช่น ถ้าสคริปของคุณวางไว้ที่ <dfn>application/hooks</dfn> คุณก็ใช้เพียงคำว่า <samp>hooks</samp> เป็น filepath ถ้าสคริปของคุณอยู่ที่ <dfn>application/hooks/utilities</dfn> คุณก็ต้องใช้ <samp>hooks/utilities</samp> เป็น filepath โดยไม่ต้องตัดเครื่องหมายเส้นแบ่ง (/)</li>
<li><strong>params</strong>&nbsp; พารามิเตอร์ต่างๆที่คุณต้องการจะส่งไปในสคริปของคุณ อันนี้เป็นทางเลือกไม่จำเป็นต้องใส่ก็ได้</li>
</ul>


<h2>เรียกตะขอเดิมหลายครั้งพร้อมกัน</h2>

<p>ถ้าคุณต้องการใช้ตะขอเดิมมากกว่าหนึ่งสคริป ให้คุณเพิ่มอาเรย์ตอนประกาศแบบนี้: </p>

<code>
$hook['pre_controller']<kbd>[]</kbd> = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'class'&nbsp;&nbsp;&nbsp;&nbsp;=> 'MyClass',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'function' => 'Myfunction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filename' => 'Myclass.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filepath' => 'hooks',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'params'&nbsp;&nbsp;&nbsp;=> array('beer', 'wine', 'snacks')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
$hook['pre_controller']<kbd>[]</kbd> = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'class'&nbsp;&nbsp;&nbsp;&nbsp;=> 'MyOtherClass',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'function' => 'MyOtherfunction',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filename' => 'Myotherclass.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'filepath' => 'hooks',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'params'&nbsp;&nbsp;&nbsp;=> array('red', 'yellow', 'blue')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</code>

<p>สังเกตุวงเล็บจะอยู่หลังตัวชี้อาเรย์ (array index) :</p>

<code>$hook['pre_controller']<kbd>[]</kbd></code>

<p>สิ่งนี้ยินยอมให้คุณใช้ปลายตะขอเดียวกับหลายสคริป  โดยขั้นตอนการทำงานจะขึ้นอยู่กับลำดับที่คุณกำหนดอาเรย์ของคุณ</p>


<h2>ปลายตะขอ</h2>

<p>สิ่งต่อไปนี้คือปลายตะขอที่มีให้ใช้</p>

<ul>
		<li><strong>pre_system</strong><br />
			ถูกเรียกตั้งแต่แรกเริ่มของการทำงานระบบ โดยมีคลาสวัดการประมวลผลและคลาสตะขอ (Benchmark and Hooks Class)  ที่ถูกโหลด ณ จุดนี้ ยังไม่มีเรื่องกำหนดเส้นทางหรือการทำงานอื่นเกิดขึ้น</li>
		<li><strong>pre_controller</strong><br />
			ถูกเรียกทันทีก่อนที่ตัวควบคุม (controller) ใดของคุณจะถูกเรียก โดยขั้นตอนนี้การโหลดคลาสพื้นฐาน , กำหนดเส้นทาง(routing), และตรวจสอบความปลอดภัยได้ทำเสร็จเรียบร้อยไปแล้ว</li>
		<li><strong>post_controller_constructor</strong><br />
			ถูกเรียกทันทีเมื่อตัวสร้างคลาสของตัวควบคุมของคุณถูกสร้างขึ้นเสร็จเรียบร้อย แต่ยังไม่มีการเรียก method ใดๆเกิดขึ้น</li>
		<li><strong>post_controller</strong><br />
			ถูกเรียกทันทีเมื่อตัวควบคุมถูกสร้างขึ้นเสร็จอย่างสมบูรณ์แบบ</li>
		<li><strong>display_override</strong><br />
			ลบล้างฟังก์ชั่น <dfn>_display()</dfn> ที่เคยถูกทำไว้ส่งหน้าที่เสร็จสิ้นการทำงานไปยังเว็บบราวเซอร์  สิ่งนี้ยอมให้คุณใช้การวิธีการแสดงข้อมูลของคุณเอง  คุณจะต้องใช้ CI superobject ด้วยคำสั่ง <dfn>$this->CI =&amp; get_instance()</dfn> และข้อมูลสุดท้ายจะพร้อมแล้วให้คุณเรียกด้วยคำสั่ง <dfn>$this->CI->output->get_output()</dfn></li>
		<li><strong>cache_override</strong><br />
			ยอมให้คุณเรียกฟังก์ชั่นของคุณเองแทนที่จะใช้ฟังก์ชั่น <dfn>_display_cache()</dfn> ของ  output class  สิ่งนี้ยอมให้คุณใช้กลไกการแสดงผลข้อมูลที่ cache ไว้เอง</li>
		<li><strong>scaffolding_override</strong><br />
			เมื่อมีการร้องขอโครงยกพื้น(scaffolding) ปลายตะขอนี้ยินยอมให้เรียกการทำงานสคริปของคุณแทนได้</li>
		<li><strong>post_system</strong><br />
			ถูกเรียกขึ้นหลังจากหน้าที่จะถูกแสดงถูกส่งไปยังบราวเซอร์ เป็นจุดสิ้นสุดของการทำงานระบบหลักจากที่ส่งข้อมูลสุดท้ายไปยังบราวเซอร์</li>
	</ul>
</div>
<!-- END CONTENT -->


<div id="footer">
<p>
หัวข้ออันก่อน:&nbsp;&nbsp;<a href="core_classes.html">สร้างคลาสสำหรับส่วนสำคัญของระบบ</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">บนสุดของหน้า</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">หน้าหลักคู่มือการใช้งาน</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
หัวข้อถัดไป:&nbsp;&nbsp;<a href="autoloader.html">การโหลดทรัพยากรแบบอัตโนมัติ</a></p>
<p>คู่มือการใช้งาน CodeIgniter นี้ได้ทำการคัดลอกและดัดแปลงจาก <a href="http://codeigniter.com/user_guide/">CodeIgniter User Guide</a></p><p>
<a href="http://codeigniter.com">CodeIgniter</a>
 ·  Copyright © 2006-2009  · 
<a href="http://ellislab.com/">Ellislab, Inc.</a>
</p>
</div>

</body>
</html>